﻿#ifndef LAMPCONTROL_H
#define LAMPCONTROL_H

#include <QObject>
#include <QSettings>

/// TODO： 光源亮度值应保存在文件中。
/// TODO: 不同的实验用的亮度值不同，应该有所区别。可以分别保存。

/**
 * @brief The LampControl class 光源控制的接口类
 */
class LampControl : public QObject
{
    Q_OBJECT
public:
    explicit LampControl(QObject *parent = nullptr);

    /**
     * @brief value 获得灯的当前亮度
     * @return 范围 0 - 255
     */
    virtual int value() = 0;

    virtual void loadSettings(QSettings &settings) {Q_UNUSED(settings);}
    virtual void writeSettings(QSettings &settings) {Q_UNUSED(settings);}
signals:
    void valueChanged(int value);

public slots:

    /**
     * @brief setTracking 是否记录每个物镜的亮度
     * @param on
     */
    void setTracking(bool on) {m_tracking = on;}

    /**
     * @brief setValue 设置灯的亮度
     * @param value 取值范围 0 - 255
     */
    virtual void setValue(int value) = 0;

    /**
     * @brief turnOnOff 开关光源
     * @param on
     */
    virtual void turnOnOff(bool on) = 0;

    void onLensChanged(int oldlens, int newlens);

protected:
    int m_lens = 0; //记录当前是哪颗物镜
    int m_brightness[10]; // 不同物镜对应的亮度
    bool m_tracking;
};

#endif // LAMPCONTROL_H
